package com.mashibing.leetcode.arr;

import java.util.Arrays;
//350 两个数组的交集
public class IntersectionTwoArraysII {

    /**
     * 初始时，两个指针分别指向两个数组的头部。
     * 每次比较两个指针指向的两个数组中的数字，如果两个数字不相等，则将指向较小数字的指针右移一位，
     * 如果两个数字相等，将该数字添加到答案，并将两个指针都右移一位。当至少有一个指针超出数组范围时，遍历结束。
     */
    public int[] intersect(int[] nums1, int[] nums2) {
          int length1=nums1.length;
          int length2=nums2.length;
          int[] intersection = new int[Math.min(length1, length2)];//返回结果
          Arrays.sort(nums1);
          Arrays.sort(nums2);
          int index=0,index1=0,index2=0;
          while(index1<length1&&index2<length2){
              if (nums1[index1]==nums2[index2]){
                  intersection[index]=nums1[index1];
                  index++; index1++; index2++;
              }else if(nums1[index1]>nums2[index2]){
                  index2++;
              }else{
                  index1++;
              }
          }
          return  Arrays.copyOfRange(intersection, 0, index);
    }

    public static void main(String[] args) {
        IntersectionTwoArraysII intersectionTwoArraysII = new IntersectionTwoArraysII();
        int[] end =intersectionTwoArraysII.intersect(new int[]{1,2,3},new int[]{4,5,6,1,2,1});
        for (int i : end) {
            System.out.println(i);
        }
//        Arrays.sort(nums1);
//        Arrays.sort(nums2);
//        int length1 = nums1.length, length2 = nums2.length;
//        int[] intersection = new int[Math.min(length1, length2)];//返回结果
//        int index1 = 0, index2 = 0, index = 0;
//        while (index1<length1&&index2<length2){ //较小的右移，相等的放进去
//            if (nums1[index1]==nums2[index2]){
//                intersection[index]=nums1[index1];
//                index++;index1++;index2++;
//            }else if(nums1[index1]<nums2[index2]){
//                index1++;
//            }else{
//                index2++;
//            }
//        }
//        return Arrays.copyOfRange(intersection, 0, index);
    }


}
